package com.dhecp.project.system.service;

import java.util.List;
import java.util.Map;
import com.dhecp.common.core.domain.AjaxResult;
import com.dhecp.core.layui.TreeDataModel;
import com.dhecp.core.layui.TreeSelectDataModel;
import com.dhecp.project.system.domain.SysOrganizationInfo;

/**
 * 组织机构
 * @author DH-Xxj
 * @version 2019年9月19日
 */
public interface SysOrganizationInfoService {

	/**
	 * 通过机构名称查询单条记录
	 * @param orgName
	 * @return OrganizationInfo
	 * @author XDH
	 */
	SysOrganizationInfo queryOrganizationInfoByOrgName(String orgName);

	/**
	 * 通过guid查询单条记录
	 * @param guid
	 * @return OrganizationInfo
	 * @author DH-Xxj
	 */
	SysOrganizationInfo queryOrganizationInfoByGuid(String guid);

	/**
	 * 通过orgid查询单条记录
	 * @param orgid
	 * @return OrganizationInfo
	 * @author DH-Xxj
	 */
	SysOrganizationInfo queryOrganizationInfoByOrgid(String orgid);

	/**
	 * 直接查询组织机构表的数据
	 * @param params
	 * @return List-OrganizationInfo
	 * @author DH-Xxj
	 */
	List<SysOrganizationInfo> queryOrganizationInfo(Map<String, Object> params) throws Exception;

	/**
	 * 查询调入组织机构对象
	 * @param params
	 * @return List - OrganizationInfo
	 * @author DH-Xxj
	 * @throws Exception 
	 */
	List<SysOrganizationInfo> queryOrganizationInfoObject(Map<String, Object> params) throws Exception;

	/**
	 * 查询调入组织机构对象
	 * @param params
	 * @return List - OrganizationInfo
	 * @author DH-Xxj
	 * @throws Exception
	 */
	List<SysOrganizationInfo> queryOrganizationInfoObjectByIdOrName(Map<String, Object> params) throws Exception;

	/**
	 * 部门列表
	 * @param params
	 * @return List-OrganizationInfo
	 * @author kimiloo
	 */
	List<SysOrganizationInfo> queryDeptInfo(Map<String, Object> params) throws Exception;

	/**
	 * 获取组织机构树
	 * @param params
	 * @return List-TreeDataModel
	 * @author DH-Xxj
	 */
	List<TreeDataModel> queryOrganizationInfoTree(Map<String, Object> params);

	/**
	 * 获取组织机构树（含复选框）
	 * @param params
	 * @return List-TreeSelectDataModel
	 * @author DH-Xxj
	 */
	List<TreeSelectDataModel> queryOrganizationInfoTreeSelect(Map<String, Object> params);

	/**
	 * 获取排除用户的组织机构树（含复选框）
	 * @param params
	 * @return List-TreeSelectDataModel
	 * @author DH-Xxj
	 */
	List<TreeSelectDataModel> queryOrganizationInfoTreeSelectNoUser(Map<String, Object> params);

	/**
	 * 分配用户
     * @param pguid 必要参数： 上级机构唯一值
     * @param userList 必要参数：对应实体类的json格式字符串(orgid:用户编号,orgName:用户名称)
	 * @return MessageModel
	 * @throws Exception
	 * @author DH-Xxj
	 */
	AjaxResult insertOrganizationInfoUser(Map<String, Object> params);
	
	/**
	 * 分配管理者
     * @param guid 必要参数： 要分配管理者的机构唯一值
     * @param userList 必要参数：对应实体类的json格式字符串(orgid:用户编号)
	 * @return MessageModel
	 * @throws Exception
	 * @author DH-Xxj
	 */
	AjaxResult insertOrgManagersByGuid(Map<String, Object> params) throws Exception;

	/**
	 * 通过orgid删除机构中指定的用户
	 * @param params
	 * 		必要参数：orgid（用户编号）
	 * @return MessageModel
	 * @throws Exception
	 * @author DH-Xxj
	 */
	AjaxResult deleteUserByOrgid(Map<String, Object> params) throws Exception;
	
	/**
	 * 删除管理者
	 * @param params
	 * 		必要参数：guid（要删除管理者的机构唯一值） 
	 * 		必要参数：orgid（要删除的管理者用户编号）
	 * @return MessageModel
	 * @throws Exception
	 * @author DH-Xxj
	 */
	AjaxResult deleteOrgManagersByGuid(Map<String, Object> params) throws Exception;

	/**
	 * 通过guid修改机构上级（机构转移）
	 * @param params
	 * 		必要参数：guid（要修改的机构唯一值） 
	 * 		必要参数：pguid（修改后的上级机构唯一值,上级guid）
	 * @return MessageModel
	 * @throws Exception
	 * @author DH-Xxj
	 */
	AjaxResult updatePguidByGuid(Map<String, Object> params) throws Exception;

}